#include "coomm.hpp"

int main()
{
    // 1 获取共享内存的key
    key_t k = getKey();
    printf("0x%x\n", k);

    // 2 获取创建的共享内存块的id值
    int shmid = creatShm(k);
    printf("server creat shmid:%d\n", shmid);

    // sleep(5);

    // 3 关联共享内存和该进程的虚拟地址空间
    char *start = (char *)attachShm(shmid);
    printf("server attch success, address start: %p\n", start);

    // 4 使用共享内存，server读取数据（收到别人发的信息）
    // 直接将整个start空间当作字符串就能完成通信，当然也能当成其他的
    while (true)
    {
        // 管道 char buffer read(pipefd,buffer)...
        printf("client -> server:%s\n", start);
        struct shmid_ds ds;
        shmctl(shmid, IPC_STAT, &ds);
        printf("获取共享内存内核属性:size:%d, pid:%d, myself pid:%d key:0x%x \n",\
               ds.shm_segsz, ds.shm_cpid, getpid(), ds.shm_perm.__key);
        sleep(1);
    }

    // 5 去关联共享内存和虚拟地址空间的映射
    detachShm(start);
    printf("server delete attch success!\n");
    sleep(5); 

    // 6 强制删除共享内存(注意，先去关联，再删除共享内存)
    delShm(shmid);
    return 0;
}